From 4fb6961c6aeb22908d376339ff17718a16a4d8a6 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Fri, 16 Dec 2011 18:24:24 +0100 Subject: [PATCH] filechooserentry: Allow NULL as base folder again This was removed previously, but is necessary to support the case where no base folder is in use, which should cause an error. This can be experienced in save mode in the recent files list. https://bugzilla.gnome.org/show_bug.cgi?id=663573 --- gtk/gtkfilechooserentry.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/gtk/gtkfilechooserentry.c b/gtk/gtkfilechooserentry.c index 4219f2f666..3971518480 100644 --- a/gtk/gtkfilechooserentry.c +++ b/gtk/gtkfilechooserentry.c @@ -171,7 +171,6 @@ _gtk_file_chooser_entry_init (GtkFileChooserEntry *chooser_entry) GtkCellRenderer *cell; chooser_entry->local_only = TRUE; - chooser_entry->base_folder = g_file_new_for_path (g_get_home_dir ()); g_object_set (chooser_entry, "truncate-multiline", TRUE, NULL); @@ -214,7 +213,8 @@ gtk_file_chooser_entry_finalize (GObject *object) { GtkFileChooserEntry *chooser_entry = GTK_FILE_CHOOSER_ENTRY (object); - g_object_unref (chooser_entry->base_folder); + if (chooser_entry->base_folder) + g_object_unref (chooser_entry->base_folder); if (chooser_entry->current_folder_file) g_object_unref (chooser_entry->current_folder_file); @@ -304,8 +304,10 @@ gtk_file_chooser_get_file_for_text (GtkFileChooserEntry *chooser_entry, if (str[0] == '~' || g_path_is_absolute (str) || has_uri_scheme (str)) file = g_file_parse_name (str); - else + else if (chooser_entry->base_folder != NULL) file = g_file_resolve_relative_path (chooser_entry->base_folder, str); + else + file = NULL; return file; } @@ -318,6 +320,9 @@ gtk_file_chooser_get_directory_for_text (GtkFileChooserEntry *chooser_entry, file = gtk_file_chooser_get_file_for_text (chooser_entry, text); + if (file == NULL) + return NULL; + if (text[0] == 0 || text[strlen (text) - 1] == G_DIR_SEPARATOR) return file; @@ -713,16 +718,16 @@ void _gtk_file_chooser_entry_set_base_folder (GtkFileChooserEntry *chooser_entry, GFile *file) { + g_return_if_fail (GTK_IS_FILE_CHOOSER_ENTRY (chooser_entry)); + g_return_if_fail (file == NULL || G_IS_FILE (file)); + + if (chooser_entry->base_folder == file || + (file != NULL && chooser_entry->base_folder != NULL + && g_file_equal (chooser_entry->base_folder, file))) + return; + if (file) g_object_ref (file); - else - file = g_file_new_for_path (g_get_home_dir ()); - - if (g_file_equal (chooser_entry->base_folder, file)) - { - g_object_unref (file); - return; - } if (chooser_entry->base_folder) g_object_unref (chooser_entry->base_folder); -- 2.30.2